Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

290
Vistas
UWSGI Flask SQLAlchemy Errores intermitentes de PostgreSQL con "ADVERTENCIA: ya hay una transacción en curso"

En mi aplicación UWSGI Flask recibo errores intermitentes como los siguientes:

  • DatabaseError: (psycopg2.DatabaseError) error with no message from the libpq
  • ResourceClosedError: This result object does not return rows. It has been closed automatically.
  • NoSuchColumnError: "Could not locate column in row for column 'my_table.my_column_name_that_exists'"
  • DatabaseError: (psycopg2.DatabaseError) insufficient data in "D" message...lost synchronization with server: got message type "2", length 740303471

En mi registro de postgresql veo: WARNING: there is already a transaction in progress

Actualizar la página web en el matraz generalmente resuelve el error.

Estos son los pasos que tomo para reproducir el error:

  1. detener la aplicación
  2. sudo service postgresql restart
  3. iniciar la aplicación
  4. navegue a una página web en mi aplicación de matraz que realiza varias consultas simultáneas
    • comportamiento esperado: no se registraron errores en la base de datos
    • comportamiento real: se producen uno o más de los errores enumerados anteriormente

Intenté aumentar la verbosidad del registro de postgresql y lo que parece ser un intercambio inadecuado de transacciones virtuales, por ejemplo, a continuación se muestran todas las entradas de registro con la transacción virtual 2/53 y corresponde a los errores anteriores:

 process 8548 session 5901589a.2164 vtransaction 2/53 LOG: statement: BEGIN process 8548 session 5901589a.2164 vtransaction 2/53 LOG: statement: SELECT 1 process 8548 session 5901589a.2164 vtransaction 2/53 LOG: statement: SELECT my_table.id AS my_table_id, ... FROM my_table WHERE my_table.id = 'my_id' LIMIT 1 process 8548 session 5901589a.2164 vtransaction 2/53 LOG: statement: BEGIN process 8548 session 5901589a.2164 vtransaction 2/53 WARNING: there is already a transaction in progress process 8548 session 5901589a.2164 vtransaction 2/53 LOG: statement: SELECT 1 process 8548 session 5901589a.2164 vtransaction 2/53 LOG: statement: SELECT my_other_table.id AS my_other_table_id, ... FROM my_other_table WHERE 'my_other_id' = my_other_table.id process 8548 session 5901589a.2164 vtransaction 2/53 LOG: statement: SELECT my_table.id AS my_table_id, ... FROM my_table WHERE my_table.id = 'my_id' LIMIT 1 process 8548 session 5901589a.2164 vtransaction 2/53 LOG: statement: ROLLBACK
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Estos errores son síntomas de conexiones de bases de datos compartidas incorrectamente por varios subprocesos o procesos.

De forma predeterminada, uwsgi bifurca el proceso después de crear la aplicación en el archivo wsgi. Si la creación de la aplicación crea conexiones de base de datos que pueden reutilizarse, es probable que termine con procesos bifurcados que tienen un estado de base de datos corrupto. Para resolver esto en uwsgi hay opciones:

  1. no cree conexiones de base de datos hasta después de crear la aplicación, O
  2. llame a uwsgi con la opción --lazy-apps , que cambia uwsgi a bifurcación antes de que se cree la aplicación

Hay consecuencias de rendimiento negativas para el modo lazy-apps (ver prebifurcación vs aplicaciones perezosas vs perezosas ), por lo que evitar el uso de la base de datos durante la creación de la aplicación es generalmente la mejor opción.

Gracias univerio por explicar esto en los comentarios.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda